package org.example;



import io.restassured.RestAssured;


import io.restassured.response.Response;
import io.restassured.specification.RequestSpecification;
import org.example.utils.ReadConf;

import java.io.UnsupportedEncodingException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;



//import static org.example.CookieManager.cookies;

public class RestClient {


   private static Map<String, String> setCookieHeaders = new HashMap<>();

    // 初始化cookies的示例方法（实际项目中，你可能会有不同的方式来设置这个Map）
    public static void setCookies(Map<String, String> cookies) {
        setCookieHeaders.clear();
        setCookieHeaders.putAll(cookies);
    }

    // 封装了添加cookies的请求方法
    public static RequestSpecification givenWithCookies() {
        RequestSpecification request = RestAssured.given();
        if (setCookieHeaders != null && !setCookieHeaders.isEmpty()) {
            for (Map.Entry<String, String> entry : setCookieHeaders.entrySet()) {
                request.cookie(entry.getKey(), entry.getValue());
            }
        }
        return request;
    }

    public static void main(String[] args) throws UnsupportedEncodingException {
        loginAndUpdateCookies();

    }
    // 示例：登录并更新cookies
    public static void loginAndUpdateCookies() {
        // 假设这里执行登录请求
        RestAssured.baseURI = ReadConf.getHost(); // 设置基础URI
        String psd = ReadConf.readConf("userPasswordForQcdz");
        String loginName = ReadConf.readConf("userNameForQcdz");
        Map<String, String> formParams = new HashMap<>();

        formParams.put("loginName", loginName);
        formParams.put("psd", psd);
        Response response = RestAssured.given()
                .header("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
                .when()
                .formParams(formParams)
                .post("login.do?method=login_qyzh");
        List<String> setCookieHeadersList  = response.getHeaders().getValues("Set-Cookie");


            if (setCookieHeadersList != null && !setCookieHeadersList.isEmpty()) {
                Map<String, String> cookies = new HashMap<>();
                for (String header : setCookieHeadersList ) {
                    //分析Set-Cookie头部
                    String[] cookieParts = header.split(";");
                    String cookieName = null;
                    String cookieValue = null;
                    Integer maxAge = null;
                    String expiresString = null;

                    for (String part : cookieParts) {
                        part = part.trim();
                        if (part.startsWith("Expires=")) {
                            expiresString = part.substring("Expires=".length());
                        } else if (part.startsWith("Max-Age=")) {
                            maxAge = Integer.parseInt(part.substring("Max-Age=".length()));
                        } else if (cookieName == null && part.contains("=")) {
                            // 假设这是 cookie 的 name=value 对，并且它是第一个这样的对
                            String[] nameValue = part.split("=", 2);
                            cookieName = nameValue[0];
                            cookieValue = nameValue.length > 1 ? nameValue[1] : "";
                            cookies.put(cookieName, cookieValue);
//                            System.out.println("Cookie: " + cookieName + "=" + cookieValue);


                        }

                    }
                    // 处理 cookie 的 name 和 value（如果有的话）
                    if (cookieName != null && cookieValue != null) {
//                        System.out.println("Cookie name: " + cookieName);
//                        System.out.println("Cookie value: " + cookieValue);
                    }

                    // 处理 Expires（如果有的话）
                    if (expiresString != null) {
                        SimpleDateFormat sdfInput = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss", Locale.US);
                        sdfInput.setLenient(false); // 确保严格解析
                        try {
                            Date expiresDate = sdfInput.parse(expiresString);

                            // 将日期格式转换为 RFC 1123 格式（通常不包括时区，因为HTTP客户端期望UTC）
                            SimpleDateFormat sdfOutput = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss 'GMT'", Locale.US);
                            // 注意：这里我们硬编码了'GMT'，但实际上对于HTTP Expires头，客户端应该假设UTC
                            // 如果你想要完全遵循RFC 1123并且确定需要时区信息，可以改用'Z'作为时区，但这不是HTTP Expires头的标准做法
                            // sdfOutput.setTimeZone(TimeZone.getTimeZone("GMT")); // 这行通常不需要，因为HTTP日期时间假设为UTC
                            String formattedExpiresDate = sdfOutput.format(expiresDate);
                            System.out.println(formattedExpiresDate);

//                            System.out.println("Cookie expires (RFC 1123-like, UTC assumed): " + formattedExpiresDate);
                        } catch (ParseException e) {
                            System.err.println("Failed to parse expires date: " + e.getMessage());
                            // 你可以在这里添加更多的错误处理逻辑，比如记录日志、抛出异常或返回错误响应
                        }
                    }

                    // 处理 Max-Age（如果有的话）
                    if (maxAge != null) {
                        Date now = new Date();
                        long expiresMillis = now.getTime() + maxAge * 1000;
                        Date expiresDate = new Date(expiresMillis);
//                        System.out.println("Cookie max-age: " + maxAge + " seconds (expires: " + expiresDate + ")");
                    }
                }
//                System.out.println(setCookieHeadersList);
                setCookies(cookies);
//
            } else {
                System.out.println("No Set-Cookie headers found.");
            }
    }
}




// 检查是否需要重新登录
















